/**
 * API配置文件
 */

// 环境配置
const ENV = {
  DEVELOPMENT: 'development',
  PRODUCTION: 'production'
}

// 当前环境（可以根据实际情况修改）
const CURRENT_ENV = ENV.PRODUCTION

// 不同环境的配置
const CONFIG = {
  [ENV.DEVELOPMENT]: {
    // 开发环境配置
    API_BASE_URL: 'https://api.youpin91.com/',
    STATIC_URL: 'http://static.youpin91.com/',
    VIDEO_URL: 'http://static.youpin91.com/',
    SERVER_ADDRESS: 'https://weixin.youpin91.com.cn/',
    // 微信小程序配置
    WECHAT_APP_ID: 'wxc7bc34d38591d576',
    WECHAT_OAUTH_URL: 'https://open.weixin.qq.com/connect/oauth2/authorize',
    DEBUG: true
  },
  [ENV.PRODUCTION]: {
    // 生产环境配置
    API_BASE_URL: 'https://api.youpin91.com/',
    STATIC_URL: 'https://static.youpin91.com/',
    VIDEO_URL: 'https://static.youpin91.com/',
    SERVER_ADDRESS: 'https://weixin.youpin91.com.cn/',
    // 微信小程序配置
    WECHAT_APP_ID: 'wxc7bc34d38591d576',
    WECHAT_OAUTH_URL: 'https://open.weixin.qq.com/connect/oauth2/authorize',
    DEBUG: false
  }
}

// 获取当前环境配置
const getConfig = () => {
  return CONFIG[CURRENT_ENV]
}

// API版本信息
export const API_VERSION = '2.1.11'

// 客户端信息
export const CLIENT_INFO = {
  from: 'uniapp',
  client: 1,
  rp: 4
}

// 请求超时时间（毫秒）
export const REQUEST_TIMEOUT = 10000

// 上传文件大小限制（字节）
export const UPLOAD_SIZE_LIMIT = 5 * 1024 * 1024 // 5MB

// 支持的图片格式
export const SUPPORTED_IMAGE_TYPES = ['jpg', 'jpeg', 'png', 'gif', 'webp']

// 支持的视频格式
export const SUPPORTED_VIDEO_TYPES = ['mp4', 'avi', 'mov', 'wmv', 'flv']

// 分页配置
export const PAGINATION = {
  DEFAULT_PAGE_SIZE: 20,
  MAX_PAGE_SIZE: 100
}

// 缓存配置
export const CACHE_CONFIG = {
  // 用户信息缓存时间（毫秒）
  USER_INFO_CACHE_TIME: 24 * 60 * 60 * 1000, // 24小时
  // 商品分类缓存时间（毫秒）
  CATEGORY_CACHE_TIME: 60 * 60 * 1000, // 1小时
  // 首页数据缓存时间（毫秒）
  HOME_DATA_CACHE_TIME: 30 * 60 * 1000 // 30分钟
}

// 错误码配置
export const ERROR_CODES = {
  SUCCESS: 0,
  LOGIN_EXPIRED: -1000,
  PARAM_ERROR: -1001,
  NETWORK_ERROR: -1002,
  SERVER_ERROR: -1003,
  PERMISSION_DENIED: -1004
}

// 错误信息映射
export const ERROR_MESSAGES = {
  [ERROR_CODES.LOGIN_EXPIRED]: '登录已过期，请重新登录',
  [ERROR_CODES.PARAM_ERROR]: '参数错误',
  [ERROR_CODES.NETWORK_ERROR]: '网络异常，请检查网络连接',
  [ERROR_CODES.SERVER_ERROR]: '服务器异常，请稍后重试',
  [ERROR_CODES.PERMISSION_DENIED]: '权限不足'
}

// 订单状态
export const ORDER_STATUS = {
  PENDING_PAYMENT: 1, // 待付款
  PENDING_DELIVERY: 2, // 待发货
  PENDING_RECEIPT: 3, // 待收货
  COMPLETED: 4, // 已完成
  CANCELLED: 5, // 已取消
  REFUNDING: 6, // 退款中
  REFUNDED: 7 // 已退款
}

// 订单状态文本
export const ORDER_STATUS_TEXT = {
  [ORDER_STATUS.PENDING_PAYMENT]: '待付款',
  [ORDER_STATUS.PENDING_DELIVERY]: '待发货',
  [ORDER_STATUS.PENDING_RECEIPT]: '待收货',
  [ORDER_STATUS.COMPLETED]: '已完成',
  [ORDER_STATUS.CANCELLED]: '已取消',
  [ORDER_STATUS.REFUNDING]: '退款中',
  [ORDER_STATUS.REFUNDED]: '已退款'
}

// 支付方式
export const PAYMENT_METHODS = {
  WECHAT: 'wechat',
  ALIPAY: 'alipay',
  BALANCE: 'balance'
}

// 支付方式文本
export const PAYMENT_METHOD_TEXT = {
  [PAYMENT_METHODS.WECHAT]: '微信支付',
  [PAYMENT_METHODS.ALIPAY]: '支付宝',
  [PAYMENT_METHODS.BALANCE]: '余额支付'
}

// 用户类型
export const USER_TYPES = {
  NORMAL: 1, // 普通用户
  VIP: 2, // VIP用户
  MERCHANT: 3 // 商户
}

// 商品状态
export const GOODS_STATUS = {
  ON_SALE: 1, // 在售
  OFF_SALE: 0, // 下架
  SOLD_OUT: 2 // 售罄
}

// 地址类型
export const ADDRESS_TYPES = {
  HOME: 1, // 家庭地址
  COMPANY: 2, // 公司地址
  OTHER: 3 // 其他地址
}

// 性别
export const GENDER = {
  UNKNOWN: 0, // 未知
  MALE: 1, // 男
  FEMALE: 2 // 女
}

// 性别文本
export const GENDER_TEXT = {
  [GENDER.UNKNOWN]: '未知',
  [GENDER.MALE]: '男',
  [GENDER.FEMALE]: '女'
}

// 正则表达式
export const REGEX = {
  PHONE: /^1[3-9]\d{9}$/, // 手机号
  EMAIL: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/, // 邮箱
  ID_CARD: /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/, // 身份证号
  PASSWORD: /^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{6,20}$/, // 密码（6-20位，包含字母和数字）
  CHINESE: /[\u4e00-\u9fa5]/, // 中文字符
  NUMBER: /^\d+$/, // 纯数字
  DECIMAL: /^\d+(\.\d+)?$/ // 数字（包含小数）
}

// 微信授权 URL 构建辅助函数
export const buildWechatOAuthUrl = (redirectUri) => {
  const config = getConfig()
  const params = {
    appid: config.WECHAT_APP_ID,
    redirect_uri: encodeURIComponent(redirectUri),
    response_type: 'code',
    scope: 'snsapi_userinfo',
    state: '1'
  }
  const queryString = Object.keys(params).map(key => `${key}=${params[key]}`).join('&')
  return `${config.WECHAT_OAUTH_URL}?${queryString}#wechat_redirect`
}

// 导出当前环境配置
export default getConfig()

// 导出环境切换函数
export { getConfig, ENV, CURRENT_ENV }